/*
装饰模式：装饰器模式动态地将责任附加到对象上。若要扩展功能，装饰者提供了比继承更有弹性的替代方案。
关键代码: 装饰器和被装饰对象实现同一个接口，装饰器中使用了被装饰对象
“我觉得装饰模式是为已有功能动态地添加更多功能的一种方式。但到底什么时候用它呢？”
“答得很好，问的问题更加好。你起初的设计中，当系统需要新功能的时候，是向旧的类中添加新的代码。
这些新加的代码通常装饰了原有类的核心职责或主要行为，比如用西装或嘻哈服来装饰小菜，但这种做法的问题在于，
它们在主类中加入了新的字段，新的方法和新的逻辑，从而增加了主类的复杂度，就像你起初的那个‘人’类，
而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要。
而装饰模式却提供了一个非常好的解决方案，它把每个要装饰的功能放在单独的类中，并让这个类包装它所要装饰的对象，
因此，当需要执行特殊行为时，客户代码就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象了。

程杰. 大话设计模式

golang没有类，但把struct看做类，struct中可以包含其他的struct，继承内部struct的方法和变量，同时可以重写
*/

package main
